package com.insight.modules.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.insight.modules.system.entity.SysCategory;
import com.yuanqiao.insight.acore.system.vo.TreeSelectModel;

import java.util.List;
import java.util.Map;

/**
 * @Description: 分类字典
 * @Author: jeecg-boot
 * @Date:   2019-05-29
 * @Version: V1.0
 */
/**
 * SysCategory 表的 MyBatis Mapper 接口，继承 BaseMapper 提供基本 CRUD 操作
 */
public interface SysCategoryMapper extends BaseMapper<SysCategory> {

	/**
	 * 根据父级ID查询对应的树形结构节点数据
	 *
	 * @param pid   父节点ID
	 * @param query 额外查询条件，通常为键值对形式，支持动态筛选
	 * @return 符合条件的树形选择模型列表，用于前端树形组件展示
	 */
	List<TreeSelectModel> queryListByPid(@Param("pid") String pid, @Param("query") Map<String, String> query);

	/**
	 * 根据分类编码查询对应的分类ID
	 *
	 * @param code 分类编码，唯一标识
	 * @return 对应的分类ID，如果不存在则返回null
	 */
	@Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}")
	String queryIdByCode(@Param("code") String code);

	/**
	 * 分页查询指定父级ID的子分类列表
	 *
	 * @param serviceTypePid 父级分类ID
	 * @param currIndex      当前页起始索引（从0开始）
	 * @param pageSize       每页返回的数据条数
	 * @return 分页后的子分类列表
	 */
	List<SysCategory> querySysCategoryByParentIdWithPage(@Param("serviceTypePid") String serviceTypePid,
														 @Param("currIndex") Integer currIndex,
														 @Param("pageSize") Integer pageSize);

	/**
	 * 根据父级ID查询所有子分类列表（不分页）
	 *
	 * @param pid 父级分类ID
	 * @return 该父级ID下所有子分类的完整列表
	 */
	List<SysCategory> querySysCategoryByParentId(@Param("pid") String pid);

	/**
	 * 根据分类编码查询对应的分类编码列表
	 *
	 * <p>注意：可能存在多条数据匹配同一编码，返回所有匹配的编码。</p>
	 *
	 * @param code 分类编码
	 * @return 匹配的分类编码列表，若无匹配则返回空列表
	 */
	List<String> querySysCategoryByCode(@Param("code") String code);

}

